package com.yjzx.util.service.aop.ref.method;

import java.lang.annotation.*;
import java.lang.ref.Reference;
import java.lang.ref.SoftReference;

/**
 * @author yjzx
 * @date 2024/7/5
 * @description Ref
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RefAnnotation {
    /**
     * 是否开启缓存
     * @return
     */
    boolean enable() default true;
    /**
     * 开启缓存不可变（返回值建议使用父类，如List,Set,Collection,Map等）
     * @return
     */
    RefModification enableImmutable() default @RefModification();

    /**
     * 单位是秒 -1是不会过期，智慧被回收
     * @return
     */
    long expires() default 60;

    /**
     * 缓存类型（默认软缓存，）
     * @return
     */
    Class<? extends Reference> refClazz() default SoftReference.class;

}
